public class Encrypter
{
    private Basics basics;
    public Encrypter() {
        basics = new Basics();
    }

    public int convertValueInt(char vlr) {
        return vlr > 'Z' ? ((int)vlr)-71 : ((int)vlr)-65;
    }

    public char convertValueChar(int vlr) {
        return vlr > 25 ? (char)(vlr+71) : (char)(vlr+65);
    } 

    public int encode(String M, int e, int n) {
        //C = M^e mod n
        //n = p*q;
        //e primo relativo con (p-1)(q-1)
        String C = null;

        for (int i = 0; i < M.length(); ++i) {
            C = C + this.convertValueInt(M.charAt(i)) + "";
        }

        return basics.exponenciacionModular(Integer.parseInt(C), e, n); //C en numero
    }

    public String decode(int C, int p, int q) {
        //M = C^d mod p*q
        //d inverso de e mod (p-1)(q-1)
        int e = 0;
        int d = basics.invModular(e, (p-1)*(q-1));
        String M = Integer.toString(basics.exponenciacionModular(C, d, p*q)); //numero
        String result = "";

        for (int i=0; i<M.length(); ++i) {
            //se supone que ya el num quedó en orden. necesito una forma de ir agarrando el num de 1
            //o 2 digitos y pasarlo a char
            
        }
        return "a";
    }
}